/*******************************************************************************

                           TMenu 多值调整DEMO

*******************************************************************************/
#include "TMenu_MNumAdj.h"
#include <string.h>

#ifndef LV_LOG_USER //TGUI模式且未重定向时
  #define LV_LOG_USER(...) do {}while(0)
#endif

#ifdef TMENU_TEST_ALL    //集中测试时
  extern const TMenu_t TMenu_SubTop;      //子菜单作为总菜单
  #define  _PARENT_MENU  &TMenu_SubTop   //父菜单
#else
  #define _PARENT_MENU  NULL   //本层即为总菜单
#endif

extern const TMenu_t TMenu_MNumAdjTop;
static const TMenu_t _Sub1_TMenu;

/*******************************************************************************
                              本层总菜单实现
*******************************************************************************/

//描述
const struct _MNumDesc TimeSetDesc[] = {
  {MNUM_TYPE_DEC | MNUM_TYPE_GRP_MODE, 2000,2127},//年,测试群调整
  {MNUM_TYPE_DEC | MNUM_EN_SIGN, -1, 12},//月,测试负值
  {MNUM_TYPE_DEC, 1, 31},  //日
  {MNUM_TYPE_BIN, 0, 23},  //时,测试二进制模式
  {MNUM_TYPE_LOG, 0, 59},  //分,测试逻辑模式
  //{MNUM_TYPE_FLOAT | 1, 0.2, 59.9},//秒，测试浮点数->未通过！
  {MNUM_TYPE_DEC | 1, 0, 599},//秒，带小数点
};

//时间对应的字符
const LanCode_t* const lsAry_Time[] = {
  u8"年",u8"月", u8"日",   "hour", "minute", "sec",
};

/*******************************************************************************
                           集中调整实现
设置好后集中保存并提示
*******************************************************************************/
//模拟数值
static unsigned short _Year =  2025;
static unsigned short _Mouth = 9;
static unsigned short _Day = 25;
static unsigned short _Hour =  9;
static unsigned short _Minute = 49;
static float _Sec = 35.1;

//----------------------------------回调函数-------------------------------
static void _Notify(unsigned char Type,//通报类型
                    //根据菜单类型输入的输入输出数据区
                    //该区域结构在控件里定义,直接指针转换即可
                    void *pv)
{
  struct _MNumAdjUser *pUser = (struct _MNumAdjUser *)pv;
  switch(Type){
  case TM_NOTIFY_GET_DATA:{ //将当前值装入
    pUser->Value[0] = _Year;
    pUser->Value[1] = _Mouth;
    pUser->Value[2] = _Day;
    pUser->Value[3] = _Hour;
    pUser->Value[4] = _Minute;
    pUser->Value[5] = _Sec;
    break;
  }
  case TM_NOTIFY_SET_DATA:{ //保存设定值->集中保存时
  //case TM_NOTIFY_CHANGED:{ //保存设定值->独立保存时
    _Year = pUser->Value[0];
    _Mouth = pUser->Value[1];
    _Day = pUser->Value[2];
    _Hour = pUser->Value[3];
    _Minute = pUser->Value[4];
    _Sec = pUser->Value[5];
    break;
  }
  case TM_NOTIFY_MNUM_GET_DESC:{ //得到数值描述
    memcpy(&pUser->Desc,
           &TimeSetDesc[pUser->CurItem],
           sizeof(struct _MNumDesc));
    break;
  }
  default:break;
  }
}


//--------------------------顶层菜单结构----------------------------
const TMenu_t TMenu_MNumAdjTop = {//顶层菜单结构
  TMTYPE_MNUMADJ | TM_MNUMADJ_WRITE, //菜单类型为多值调整模式模式与用户区标志
  6,                         //由菜单类型决定的相关数据大小
  "Demo MNumAdj",            //菜单头,为NULL时从回调里读取
  _PARENT_MENU,              //自已的父菜单
  lsAry_Time,                //存放自已的子菜单阵列连接头
  _Notify,                   //与用户空间交互的通报函数
};
